// 引入配置
import config from '@/util/config.js'

import * as Pinia from 'pinia'
// import { createUnistorage } from '@/uni_modules/pinia-plugin-unistorage'
const store = Pinia.createPinia()
// store.use(createUnistorage())
import { commonStore } from "@/store/common.js"
const common = commonStore(store)

const requestInterceptors=(vm)=>{
	/**
	 * 请求拦截
	 * @param {Object} http
	 */
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		// debugger
		// 初始化请求拦截器时，会执行此方法，此时data为undefined，赋予默认{}
		config.data = config.data || {}
		try {
			const value = uni.getStorageSync('Authorization');
			if (value) {
				common.Authorization = uni.getStorageSync('Authorization')
			}
		} catch (e) {
			common.Authorization = ''
		}
		config.header.Authorization = common.Authorization
		config.header.clientId = uni.getDeviceInfo().deviceId
		config.header.Terminal = 'AIO'
		config.sslVerify = false //验证 ssl 证书 false为不验证
		// 可以在此通过vm引用vuex中的变量，具体值在vm.$store.state中
		// console.log(vm.$store.state);
		return config
	}, (config) => // 可使用async await 做异步操作
		Promise.reject(config))
}
const responseInterceptors=(vm)=>{
	/**
	 * 响应拦截
	 * @param {Object} http 
	 */
	uni.$u.http.interceptors.response.use((res) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
		let data = res.data
		if (data.status == 0) {
			if(data.token){ //如果返回token则刷新token
				let token = data.token
				uni.setStorageSync('Authorization',token.token)
			}
			return data || {}
		}else if(data.status == 1){ //接口返回错误回调
			if(data.msg){
				uni.$u.toast(data.msg)
			}
			return Promise.reject(data)
		} else if (data.status == 2) { //登录失效回调
			common.$reset()
			uni.navigateTo({
				url: '/pages/login/login'
			})
			return Promise.reject(data)
		}
		// return data || {}
	}, (response) => { /*  对响应错误做点什么 （statusCode !== 200）*/
		return Promise.reject(response)
	})
}

//  初始化请求配置
const initRequest=(vm)=>{
	uni.$u.http.setConfig((defaultConfig) => {
		/* defaultConfig 为默认全局配置 */
		defaultConfig.baseURL = config.baseURL /* 根域名 */
		return defaultConfig
	})
	requestInterceptors()
	responseInterceptors()
}
export {
	initRequest
}